#!/sbin/openrc-run

# If you want to run multiple separate processes, then create symlinks to
# this runscript (e.g. uwsgi.myapp or myapp) and configure options in
# the corresponding conf.d files. uWSGI options can be specified using
# variable uwsgi_opts or config file specified by variable uwsgi_conf.

: ${pidfile:="/run/$RC_SVCNAME/uwsgi.pid"}
: ${retry:="INT/30/KILL/5"}
: ${wait:=200}  # milliseconds

extra_started_commands='reload stats'
description_reload='Gracefully reload all the workers and the master process'
description_stats='Dump uWSGI statistics to log file'

command='/usr/sbin/uwsgi'
command_args="--die-on-term ${uwsgi_opts:-}"
command_background='yes'
start_stop_daemon_args="--quiet --wait $wait"

if [ "$RC_SVCNAME" = 'uwsgi' ]; then
	: ${name:="uWSGI emperor"}
	emperor='yes'
else
	: ${name:="uWSGI application ${RC_SVCNAME#uwsgi.}"}
	emperor='no'
fi

depend() {
	need net
	use apache2 lighttpd nginx
	after postgresql
}

start_pre() {
	if [ "$emperor" = 'yes' ]; then
		: ${logfile:="/var/log/uwsgi/uwsgi.log"}
		: ${user:="root"}
	else
		: ${user:="nobody"}
		command_args="--master $command_args"
	fi
	start_stop_daemon_args="$start_stop_daemon_args
		--user $user
		$(optif --group "$group")
		$(optif --stdout "$logfile")
		$(optif --stderr "$logfile")"

	if [ -z "$uwsgi_conf" ]; then
		case "$RC_SVCNAME" in
			uwsgi) uwsgi_conf='/etc/uwsgi/uwsgi.ini';;
			uwsgi.*) uwsgi_conf="/etc/uwsgi/conf.d/${RC_SVCNAME#uwsgi.}";;
			*) uwsgi_conf="/etc/$RC_SVCNAME/uwsgi";;
		esac
	fi

	if [ -f "${uwsgi_conf%.ini}.ini" ]; then
		command_args="$command_args --ini ${uwsgi_conf%.ini}.ini"
	elif [ -f "${uwsgi_conf%.yml}.yml" ]; then
		command_args="$command_args --yaml ${uwsgi_conf%.yml}.yml"
	fi

	checkpath -d -m 775 -o $user:$group \
		"$(dirname "$pidfile")"

	if yesno "$EINFO_VERBOSE"; then
		einfo "Command: $command $(printf '%s ' $command_args)"
	fi
}

reload() {
	ebegin "Reloading $name"
	start-stop-daemon --signal HUP --pidfile "$pidfile"
	eend $?
}

stats() {
	ebegin "Dumping statistics for $name to the log file"
	start-stop-daemon --signal USR1 --pidfile "$pidfile"
	eend $?
}

optif() {
	test -n "$2" && printf "%s %s\n" "$1" "$2"
}
